Comment faire un OS ?

 

 

 

Introduction :

 

Tout d’abord, que'est ce qu’un OS ?

Un OS (Operating System) permet de gérer plusieurs applications sur un même ordinateur. Vous connaissez sûrement Windows, Linus ou MacOS. Vous avez donc maintenant une idée de ce que nous allons faire …

 

Avant d'aborder le vif du sujet, quelques rappels.

Pour créer un OS, il faut d’abord connaître l'ASM (le langage connu du processeur) puis comprendre ce que fait un ordinateur quand on l'allume. Je ne fais pas un cours sur l’ASM. Si vous aves des questions sur ce sujet, vous rouverez des infos sur Google par exemple en tapant "ASM tutorial".

 

On s'interesse donc à la question : qu'est ce que fait un ordinateur quand on l'allume.

 

De façon simple, on peut dire qu'au démarrage l’ordinateur lance l'instruction ASM qui se trouve au début du disque de boot (première piste (0), premier secteur (1)), puis il passe à la seconde et ainsi de suite.

Quand on met une disquette, c'est elle qui devient disque de boot. Sinon, par défaut c'est le disque dur.

Vous pouvez bien sur modifier cela en intervenant sur le Bios.

 

L'OS que nous allons réaliser sera sur une disquette de façon à être facilement manipulable et sans danger pour les fichiers présents sur le disque dur.

 

Ce tutorial est construit sur une suite de petits exemples d'un OS.

 

Si vous développez sous Windows, vous pouvez télécharger Nasm qui vous servira à compiler votre OS.

 

Télécharger Nasm

 

Toutes les fonctions utilisées dans ce tutorial , sont expliquées dans le fichier suivant : Télécharger

 

 

Dans le vif du sujet :

 

 

I - Le premier programme

 

Le premier programme sera découpé en deux parties :

-                          Une partie qui sera exécutée sous Windows (ou un autre OS), et qui copiera l'OS sur disquette

-                          L'OS en question sera ensuite exécuté au démarrage de l'ordinateur.

 

La suite comporte 3 ou 4 parties.

 

 

La première partie, copie l'OS sur la disquette et utilise l'interruption 03H.

 

 

 

Écriture sur une disquette

 

Entrée :

 

AH    = 03h

      DL    = Numéro du lecteur de disquette (0 pour A:, 1pour B:…)

      DH    = Numéro de la face de disquette (0 ou 1)

      CH    = Numéro de piste (divisions de la disquette)

      CL    = Numéro de secteur (divisions de la disquette)

      AL    = Nombre de secteurs à écrire (taille de la copie)

      ES    = Adresse de segment du buffer

(ne pas s'en occuper pour le moment)

      BX    = Adresse d'offset du buffer

(ne pas s'en occuper pour le moment)

 

Sortie :

 

Flag Carry =0 : Opération exécutée, dans ce cas AH=0

      Flag Carry =1 : Erreur, dans ce cas AH=Code d'erreur

 

 

Vous voyez, rien de bien sorcier, il reste juste à mettre du texte autour pour faire joli J.

 

La seconde partie est l'OS lui même. Pour le moment on affiche simplement "Bonjour", mais avant de faire quoi que ce soit il faut initialiser la pile.

 

 

Initialisation de la pile

 

mov ax,0x07C0      ; segment code

mov ds,ax

mov es,ax

mov ax,0x8000      ; pile

mov ss,ax

mov sp, 0xf000

 

 

Cette partie du programme, s'exécute avant que Windows soit chargé (pas possible d'utiliser les fonctions de ce dernier). Pour afficher du texte nous utilisons l'interruption 10h

 

 

Affichage à l'écran

 

Entrée :

 

AH    = 0Eh

      AL    = Code ASCII du caractère

BL    = Couleur de premier plan du caractère (en mode graphique uniquement)

 

Sortie :

 

aucune sortie

 

Pour afficher "bonjour" il faudra donc répété la fonction 7 fois.

 

 

Affichage "bonjour"

 

mov ah,0eh

 

mov al,07h ; ==== Faire un BEEP ===

int 10h

 

mov al,' ' ; ==== Faire 8 espaces ===

int 10h

int 10h

int 10h

int 10h

int 10h

int 10h

int 10h

int 10h

 

mov al,'B' ; ==== Afficher b ===

int 10h

 

mov al,'o'

int 10h

mov al,'n'

int 10h

mov al,'j'

int 10h

mov al,'o'

int 10h

mov al,'u'

int 10h

mov al,'r'

int 10h

 

boucleinfinie: ; ==== ne plus rien faire ====

jmp boucleinfinie

 

 

 

Bien sur, une fois que l'exécution du programme est finie, pour revenir sur votre OS, il faut enlever la disquette et appuyer sur CTRL + ALT + SUPPR.

 

Voilà, si vous avez un peu la flemme de tout taper, vous pouvez télécharger le tout ici.

Télécharger le tout.

 

 

Voilà, le premier programme est fini, j'espère que vous n'avez pas trouvé ça trop dur J.

 

La suite dès que … je l'ai écrite